#include <iostream>  //C++的标准输入输出流头文件
using namespace std; //照抄，明天就能知道

/*
	cout打印地址
*/
int main()  //主函数写法跟C语言一模一样
{
	//打印各种变量的地址
	int a=45;
	double b=45.9;
	float c=78.5;
	char d='@';
	char e[10]="gec";
	
	cout<<"a的地址: "<<&a<<endl;  //等价于printf("%p\n",&a)
	cout<<"b的地址: "<<&b<<endl; 
	cout<<"c的地址: "<<&c<<endl; 
	
	/*    
		C++遇到char *指针，默认都是当成字符串来处理，不把它当成地址处理
        尤其注意char a='@'这种情况cout<<&a<<endl;也是当成字符串打印
	*/
	cout<<"d的地址: "<<&d<<endl;  // &d是char *因此当成字符串打印
	cout<<"e的地址: "<<e<<endl;   // e是char *因此当成字符串打印
	
	//某同学偷换概念：我们刚才的结论已经很清楚说了，要求是char *才是默认当成字符串
	cout<<"e的地址: "<<&e<<endl;  //  &e根本不是char *，是数组指针char (*)[10]
	//某同学偷换概念：
	char buf[20]="helloworld";
	char *p=buf;
	char **q=&p;
	cout<<"q存放的地址: "<<q<<endl;  //q是char**，根本不是char *
	cout<<"p存放的地址: "<<p<<endl; 
	
	
	//解决方法：只需要把char *强转成非char *即可(常见的是强转成int *)
	cout<<"d的地址: "<<(int *)&d<<endl;  
	cout<<"e的地址: "<<(int *)e<<endl; 
	
	return 0;
}


